package com.yunzhou.service.impl;

import com.yunzhou.constants.Constants;
import com.yunzhou.service.ImageCheckCodeService;
import com.yunzhou.utils.ImageCheckCodeUtil;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.stereotype.Service;

import java.io.IOException;

@Service
public class ImageCheckCodeServiceImpl implements ImageCheckCodeService {
    // 生成登录、注册、重置密码、发送邮箱验证码的 图片验证码
    @Override
    public void getImageCheckCode(HttpServletResponse response, HttpSession session, String key) throws IOException {
        // 自定义图片验证码的宽、高、验证码个数、干扰线个数
        ImageCheckCodeUtil imageCheckCode = new ImageCheckCodeUtil(130,38,5,10);

        // 验证码的"换一个"，为了在刷新验证码时防止浏览器使用上次的缓存，要禁用浏览器缓存。
        response.setHeader("Pragma","no-cache"); // 指示浏览器(客户端)不要缓存页面
        response.setHeader("Cache-Control", "no-cache"); // 指示浏览器(客户端)不要缓存页面
        response.setDateHeader("Expires", 0); // 使用Expires实体报头域指定页面过期时间（缓存时间）
        response.setContentType("image/jpeg"); // 指定我们返回的数据为图片类型

        // 获取图片验证码中的结果
        String code = imageCheckCode.getCode(); // 如：l8sg3

        // 图片验证码的结果存储到session中，便于下次验证
        session.setAttribute(key, code); // 将图片验证码存储到session中
        System.out.println("存储到session中的key为：" + key + "，图片验证码结果为：" + code);

        // 将图片通过输出流写入response
        imageCheckCode.write(response.getOutputStream());
    }
}
